home *** CD-ROM | disk | FTP | other *** search
/ MACD 5 / MACD 5.bin / www / ludzie / txf / progs / timemaster.lha / TimeMaster / TimeMaster.doc < prev   
Text File  |  1996-11-14  |  10KB  |  229 lines

  1.  
  2.  
  3.                             Time Master v1.0
  4.                            Public Domain 1996
  5.  
  6.  
  7.     Spotkaîeô  sië  juû  zapewne z programami, których zadaniem jest
  8. "siedzenie"  w pamiëci i wykonywanie w tym czasie uûytecznych zadaï. Czy
  9. byî  to  program  pakujâcy  w  tle  wszystkie  pliki za pomocâ algorytmu
  10. ByteRun1, czy obsîugujâcy zapis danych na magnetofonie MK 232P Automatic
  11. podîâczonym  do  zîâcza  IDE,  moûe  nawet  sterujâcy jakimô urzâdzeniem
  12. zewnëtrznym  (np. pralka). Niestety, niektóre z posiadanych przez Ciebie
  13. programów   tego  typu  to  tzw.  Demo  Versions,  charakteryzujâce  sië
  14. okreôlonym  czasem  przydatnoôci  (zwykle  okoîo  15  minut),  po którym
  15. znikajâ   z   listy   tasków   Execa   (ewentualnie  wyôwietlajâ  jakieô
  16. niesîychanie   interesujâce   informacje).   Jeûeli   tak  jest,  moûesz
  17. potrzebowaê  tego  programu.  Oczywiôcie  problem  zwiâzany  z  czasowym
  18. dziaîaniem  tych  kawaîków  softu  moûna  rozwiâzaê  w  inny sposób, np.
  19. poprzez  skrypt  uruchamiajâcy  dany  program  co 15 minut, jednakûe nie
  20. zapewnia  to  ich  pewnego dziaîania (pralka musi byê sterowana w sposób
  21. ciâgîy).  Ten program robi to inaczej - "troszkë" przedîuûa "czas próby"
  22. (sto trzydzieôci lat z hakiem).
  23.     Ostrzegam  jednak,  ûe posîugiwanie sië tym programem moûe byê nieco
  24. trudne,  wymaga  pewnej  wiedzy  o  systemie operacyjnym Amigi oraz moûe
  25. prowadziê  do  frustracji  autorów  rzeczonych  programów  (ja  bym  sië
  26. zdenerwowaî).
  27.     Nie jestem prawnikiem, ale sâdzë, ûe wykorzystywanie TimeMastera
  28. nie  jest  niezgodne  z  prawem. Nie narusza bowiem integralnoôci samego
  29. programu.  Jedynâ rzeczâ którâ robi TimeMaster jest podwieszanie sië pod
  30. wektory  systemu  operacyjnego, a jest to jak najbardziej legalne. Co do
  31. problemów   moralnych   -   majâ   one  zazwyczaj  priorytet  niûszy  od
  32. finansowych,  ale  jeûeli skonfigurowaîeô sobie ûycie inaczej (..musiaîo
  33. Cië  na  to  staê..),  to  masz  niezbywalne prawo niekorzystania z tego
  34. programu. Moûesz dodatkowo czuê wyûszoôê moralnâ nad jego autorem.
  35.  
  36.  
  37. Wymagania:
  38.  
  39.  - system 3.0 (V39)
  40.  - biblioteka patch.library V4
  41.  
  42.     System 3.0, poniewaû program uûywa funcji CreatePool etc. Dziëki
  43. temu  system  nie  jest  zwalniany  przez  normalne  funkcje  pamiëciowe
  44. za   kaûdym   razem,   gdy   trzeba   coô  zapamiëtaê  podczas  operacji
  45. OpenDevice(), CloseDevice() i BeginIO().
  46.     Biblioteka  patch.libarary,  gdyû zapewnia proste instalowanie i
  47. USUWANIE procedur patchujâcych.
  48.  
  49.     Przejdúmy   do  konkretów.  Wszelkie  pomiary  czasu  na  Amidze
  50. dokonywane przez kulturalne programy odbywajâ sië za pomocâ timer.device
  51. (BARDZO  niewiele  korzysta  bezpoôrednio  z hardware), z wykorzystaniem
  52. komendy  TR_ADDREQUEST.  Takimi  wîaônie  programami  moûe  zajmowaê sië
  53. TimeMaster  (no  cóû, niektóre robiâ to za pomocâ innych komend, ale one
  54. zasîugujâ  na  to,  aby ich nie oszukiwaê :-). Wszystko natomiast, co on
  55. robi,   to   podmienienie   wartoôci  czasu  w  IORequest  (a  wîaôciwie
  56. TimeRequest) wysyîanym do timer.device.
  57.  
  58. Uruchomienie:
  59.  
  60.     Run <>NIL: TimeMaster <taskfile>
  61.  
  62. lub z Workbencha.
  63.  
  64.     Jeûeli  zostanie  on  uruchomiony  bez  ûadnego parametru, listë
  65. tasków  do  ogîupienia  odczyta  z  pliku  'S:TimeMaster.tasks'.  Jeûeli
  66. zostanie podany jakiô argument, bëdzie on potraktowany jako nazwa pliku,
  67. z którego naleûy wczytaê listë tasków.
  68.     We  wspomnianym  wyûej  pliku  kaûdemu taskowi przysîuguje jedna
  69. linijka. Wyglâda to np. tak:
  70.  
  71. PatchRun1
  72.  
  73. co  mówi  TimeMasterowi,  ûe we WSZYSTKIE odwoîania tego programu naleûy
  74. przedîuûyê.  W  wypadku  wspomnianego wyûej programu moûna tak postâpiê,
  75. poniewaû  proôba o opóúnienie jest najprawdopodobniej jedynym odwoîaniem
  76. do timer.device.
  77.  
  78.  
  79.     Nieco  inaczej  sprawa  ma  sië z urzâdzeniami (devices). Bardzo
  80. czësto  uûywajâ  one  bowiem  timer.device  do  opóúnieï  zwiâzanych  ze
  81. sprzëtem  (np.  rozpëdzenie  sië gîowicy  magnetofonu).  Poniewaû jednak
  82. muszâ  one  byê  dokîadne,  uûywajâ raczej innego unita co do opóúnienia
  83. kilkunastominutowego  (UNIT_VBLANK=1,  o rozdzielczoôci 1/50 sekundy), a
  84. innego  do  bardziej  dokîadnych (UNIT_MICROHZ, UNIT_ECLOCK). TimeMaster
  85. zezwala  na  podanie konkretnego unita, którego IORequesty ma podmieniaê
  86. (patrz Uwaga3!):
  87.  
  88. mk232p.device 1
  89.  
  90.     W  przypadku,  gdyby  jednak program uûywaî UNIT_VBLANK takûe do
  91. innych  celów niû nasze opóúnienie (np. wîâczanie i wyîâczanie pralki co
  92. 5  minut  -  do tego celu wystarczy dokîadnoôê VBlank), argumentem który
  93. takûe  moûesz  podaê,  jest  wartoôê  czasowa  podana w sekundach, którâ
  94. naleûy  zastâpiê  przez  $FFFFFFFF lub innâ wartoôê (patrz dalej - w tym
  95. przypadku 900 - 15 minut):
  96.  
  97. PowerFrania 1 900
  98.  
  99.     W wyborze odpowiedniej wartoôci do podmiany moûe pomóc DevMon.
  100.  
  101.     A gdyby uûyê TimeMastera do przedîuûania czasu prania? Po czasie
  102. 'do podmienienia' naleûy podaê czas 'do wstawienia' (takûe dziesiëtnie!):
  103.  
  104. PowerFrania 1 3600 7200
  105.  
  106. a wiëc zmieniliômy czas z jednej godziny na dwie.
  107.     Jeûeli   chcesz   wstawiaê  konkretny  czas  zamiast  wszystkich
  108. proponowanych  przez ogîupiany program, naleûy wstawiê zero w czasie 'do
  109. podmiany':
  110.  
  111. random.device 1 0 1800
  112.  
  113.  
  114.     Plik moûe wiëc wyglâdaê tak:
  115.  
  116. '        <- tego w pilku nie ma byê!
  117. mk232p.device 1
  118. PatchRun1
  119. PowerFrania 1 900
  120. random.device 1 0 1800
  121. ramlib 1
  122. '        <- tego w pilku nie ma byê!
  123.  
  124.     Co znaczy 'ramlib 1'? Patrz na Uwagë nr 3!
  125.  
  126.  
  127.     UWAGA1: Uwaûaj na nazwë taska!
  128.  
  129.  - najlepiej uruchom program tak, jak go zazwyczaj bëdziesz uruchamiaî i
  130. wtedy sprawdú jego nazwë (np. programem ARTM). W zaleûnoôci od tego, czy
  131. uruchomiîeô go w User-Startup'ie, WBStartup'ie czy jeszcze inaczej, moûe
  132. ona  wyglâdaê  inaczej.  Np.  jeûeli  uruchamiasz  program  poprzez jego
  133. argument,   którego   ikona   ma   wpisane   w   polu  Default  Tooltype
  134. 'Work:MojeHobby/PowerFrania',   to   to   bëdzie   nazwâ  taska,  a  nie
  135. 'PowerFrania'!!!. Jeûeli wiesz jak, moûesz uûyê programu DevMon.
  136.  
  137.  -   sprawdú   wtedy  pisownië  maîych/duûych  liter!.  TimeMaster  jest
  138. programikiem   w  asemblerze,  i  nie  chciaîo  mi  sië  pisaê  procedur
  139. porównujâcych  case-insensitive,  poza tym porównywanie zabraîoby wiëcej
  140. czasu (nie mówiâc juû o uûyciu funkcji utility.library!).
  141.  
  142.  
  143.  
  144.     UWAGA2: Uwaûaj na plik z taskami!
  145.  
  146.  -  z  powodów  wspomnianych  wyûej  (lenistwo, nie prëdkoôê :-), odczyt
  147. pliku  nie  jest w ogóle idiotoodporny. Linia musi zaczynaê sië od nazwy
  148. taska,   potem   ewentualnie  po  JEDNEJ  spacji  numerek  unita,  potem
  149. ewentualnie   po   JEDNEJ  spacji  wartoôê  czasu  do  podmiany  i  znów
  150. ewentualnie po JEDNEJ spacji wartoôê czasu do wstawienia. Bez komentarzy
  151. etc. Sorry, no bonus.
  152.  
  153.  
  154.  
  155.     UWAGA3: 'ramlib <unit>' jako dodatkowy task
  156.  
  157.     W przypadku programów procedura patchowania wyglâda tak:
  158.  
  159.  -  Podczas  otwarcia  timer.device  Time Master sprawdza jaki to task i
  160. porównuje  do  listy tasków w pamiëci. Nastëpnie sprawdza unit, i jeûeli
  161. wszystko   sië   zgadza   zapamiëtuje   adres  IORequesta  (a  wîaôciwie
  162. TimeRequesta).
  163.  -  Podczas  odwoîania do funkcji BeginIO timer.device program sprawdza,
  164. czy  podany request to 'jeden z naszych' i, jeôli tak, to po ewentualnym
  165. sprawdzeniu  wartoôci do podmiany, wstawia zamiast kilkunastu minut lata
  166. ôwietlne (np, prawie) lub podanâ przez uûytkownika wartoôê.
  167.  -  Podczas  zamykania  timer.device,  TimeMaster  sprawdza  IORequest i
  168. ewentualnie usuwa go z listy requestów do podmiany.
  169.  
  170.     Z  device'ami  jest  nieco  inaczej.  Timer.device  jest  bowiem
  171. otwierany  nie  przez  nie,  a  przez  task ramlib. One 'tylko' wykonujâ
  172. OpenDevice(). TimeMaster musi wiëc zapamiëtaê wszystkie requesty uûywane
  173. przez  ramlib podczas otwarcia timer.device i potem podczas OpenDevice()
  174. sprawdziê, czy wykorzystuje go jeden z naszych tasków. Jeûeli tak, to go
  175. zapamiëtuje i podmienia.
  176.     Dlatego  konieczny  jest  wpis  ramlib, który wîaônie decyduje o
  177. zapamiëtywaniu requestów ramliba 'dokonanych' na jednostce <unit>.
  178.     Uwaga:  Z  powyûszych wzglëdów, unit podany przy ramlibie odnosi
  179. sië  do  wszystkich  device'ów, a ewentualne unity po nazwie device'a sâ
  180. ignorowane  (aczkolwiek  jeôli  chcesz  podaê  konkretnâ  wartoôê czasu,
  181. musisz podaê jakiô numerek jako unit!).
  182.     Tak  wiëc  wybieranie  unita  ma  w  zasadzie  sens  tylko  przy
  183. patchowaniu  tasków  (zakîadajâc,  ûe  w  ogóle  ma  sens,  skoro  i tak
  184. najczëôciej uûywany jest VBlank=1)
  185.     Podany przy ramlibie czas jest ignorowany.
  186.  
  187.  
  188.     UWAGA4: Device'y po raz kolejny
  189.  
  190.     Uwaûaj,  bowiem nie wszystkie device'y uûywajâ UNIT_VBLANK tylko
  191. do opóúnienia wersji demo. Konieczne jest wiëc podanie konkretnego czasu
  192. do  podmiany.  Podmiana  wszystkich  requestów  takiego  urzâdzenia moûe
  193. uczyniê  je  w  najlepszym wypadku niefunkcjonalnym, w najgorszym moûesz
  194. oczekiwaê  Guru  i  uszkodzeï  danych (zaleûnie od urzâdzenia)! You have
  195. been warned.
  196.  
  197.  
  198.  
  199.     W pliku moûe znajdowaê sië nieograniczona iloôê linii z taskami.
  200. Jeûeli  plik  jest  pusty  lub  pierwszy  znak pliku to newline (10), to
  201. TimeMaster natychmiast wychodzi z siebie.
  202.  
  203.     Raz  uruchomionego TimeMastera moûesz zatrzymaê poprzez wysîanie
  204. mu Ctrl-C. Patch'e funkcji zostanâ usuniëte, pamiëê zwolniona.
  205.  
  206.     Jeûeli  uruchomisz TimeMastera gdy jedna jego kopia juû patchuje
  207. system, nic sië nie stanie - program natychmiast wyjdzie z siebie.
  208.  
  209.     TimeMastera  moûesz  usunâê  po  tym,  jak  zostaîy  uruchomione
  210. wszystkie  ogîupiane  programy  (znaczenie  ma  tylko  podmiana  podczas
  211. BeginIO,  zazwyczaj  na poczâtku wykonywania programu), ale nie bëdâ one
  212. patchowane podczas nastëpnego uruchomienia.
  213.  
  214.  
  215.  
  216.     Autor  nie  bierze  ÛADNEJ  odpowiedzialnoôci  za  dziaîanie lub
  217. nie  dziaîanie  programu.  Jego nieodpowiednia obsîuga moûe (ba, bëdzie)
  218. prowadziê do Guru Meditation. Jego odpowiednia obsîuga moûe nic nie daê,
  219. jako ûe program NIE zostaî dokîadnie przetestowany.
  220.  
  221.  
  222.     PS. Ostatnio skopaî mi sië kod úródîowy.. Moûe jeszcze go gdzieô
  223. znajdë, na razie archiwum jest bez niego..
  224.  
  225.  
  226.     Copyright 1996 by Tadek Knapik, Public Domain.
  227.     Sorry folks.
  228.  
  229.